<?xml version="1.0" encoding="UTF-8"?>
<html>
    <head>
        <link type="text/css" rel="stylesheet" href="./css/template.css" />
        <link type="text/css" rel="stylesheet" href="./css/SyntaxHighlighter.css" />
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Introduction à Eclipse RCP</title>
        <script language="javascript" src="./js/shInit.js" />
        <script language="javascript" src="./js/shCore.js" />
        <script language="javascript" src="./js/shBrushCpp.js" />
        <script language="javascript" src="./js/shBrushCSharp.js" />
        <script language="javascript" src="./js/shBrushCss.js" />
        <script language="javascript" src="./js/shBrushDelphi.js" />
        <script language="javascript" src="./js/shBrushJava.js" />
        <script language="javascript" src="./js/shBrushJScript.js" />
        <script language="javascript" src="./js/shBrushPhp.js" />
        <script language="javascript" src="./js/shBrushPython.js" />
        <script language="javascript" src="./js/shBrushRuby.js" />
        <script language="javascript" src="./js/shBrushSql.js" />
        <script language="javascript" src="./js/shBrushVb.js" />
        <script language="javascript" src="./js/shBrushXml.js" />
        <keywords>sun,java,eclipse,3.3,rcp,rich,client,platform</keywords>
        <author>Sébastien LAOUT</author>
    </head>
    <body>
        <div class="chapter">
            <h2>Introduction</h2>
            <p>Depuis toujours en informatique, deux modèles d'applications se distinguent : les applications riches et les clients légers. Les applications riches s'exécutent directement sur le poste de l'utilisateur, tandis que les clients légers ne sont que de simples terminaux Telnet, AS400, voire de simples navigateurs internet. Ils ne comportent aucune logique métier : ils se contentent de se connecter à un serveur qui va leur fournir à la fois les applications et les données.</p>
            <p>Ces dernières années, dans les entreprises, le développement d'applications riches a peu à peu été remplacé par des applications Ajax. Pourquoi ? Principalement grâce au déploiement quasi-inexistant de telles applications. Elles sont stockées sur un serveur et les employés accèdent en permanence à la dernière version via une simple URL dans un navigateur, installé par défaut sur tous les ordinateurs.</p>
            <p>Bien qu'intéressante à de nombreux égards, la technologie Ajax soulève plusieurs problèmes. Le plus important étant un temps de développement accru. En effet, les applications doivent être développées en JavaScript, un langage non compilé et qui ne révèle les erreurs de code qu'à l'exécution. Sans oublier que son support dans les navigateurs est souvent incomplet et que la programmation orientée objet y est assez fastidieuse. Ensuite, en plus d'aller récupérer les données sur le serveur, le navigateur a besoin de récupérer toute l'interface et l'interprétation des divers fichiers Javascript conduit très vite une application Ajax à un temps de chargement inacceptable.</p>
            <p>C'est dans ce contexte que RCP, Rich Client Platform, offre une alternative viable aux clients légers Ajax. C'est la plateforme Java utilisée pour développer Eclipse. Outre ses composants standards réutilisables rapidement, RCP offre à votre application la séparation en plugins et, cerise sur le gâteau, vous permet de mettre à jour automatiquement les plugins à chaud, sans redémarrage de l'application. Cela réduit donc à néant l'avantage qu'Ajax avait envers les applications riches. Vous pourrez ainsi développer rapidement et aisément. Vos utilisateurs seront aussi ravis de ce retour aux clients riches, car ils pourront bénéficier d'une interface conviviale tandis que les applications Ajax s'efforçaient sans grand succès de ressembler le plus possible aux applications riches.</p>
            <p>Ce tutoriel se bornera à montrer comment réaliser un tel « client hybride », client riche pouvant être mis à jour via un serveur. Vous apprendrez comment créer un projet RCP, des plugins, un site de mises à jour de plugins, et comment interfacer le tout.</p>
        </div>
        <div class="chapter">
            <h2>I. Les composants d'une application RCP</h2>
            <p>Voici quelques définitions importantes pour ceux qui ne connaissent pas encore Eclipse RCP. Ce tutoriel n'a pas pour but de tout vous apprendre (la documentation abonde sur Internet), mais se concentre sur les plugins RCP.</p>
            <div class="subChapter">
                <h3>I.1 - Eclipse</h3>
                <p>Rich Client Platform est la base de développement de l'IDE Eclipse, il est normal que vous développiez vos propres applications et plugins RCP en utilisant cet IDE. Il fournit de nombreux exemples de projets, du plus simple au plus élaboré, et une très bonne intégration d'outils de développement RCP.</p>
            </div>
            <div class="subChapter">
                <h3>I.2 - SWT</h3>
                <p>Toute l'interface graphique des projets RCP est réalisée en SWT, Standard Widget Toolkit. Cette boîte à outils fournit tous les composants nécessaires et offre une intégration native du look de chaque système d'exploitation supporté.</p>
            </div>
            <div class="subChapter">
                <h3>I.3 - JFaces</h3>
                <p>JFaces est une surcouche de SWT, ajoutant le pattern MVC (Modèle, Vue, Contrôleur). Avec SWT, vous pouvez stocker vos données en un seul endroit (le Modèle) et avoir plusieurs vues différentes sur celles-ci (sous forme de tableau, de liste, d'une vue graphiquement plus évoluée..., le tout en ne stockant les données en mémoire qu'une seule fois).</p>
            </div>
            <div class="subChapter">
                <h3>I.4 - UI WorkBench</h3>
                <p>C'est le composant le plus important apporté par RCP : l'espace de travail. Il s'agit de la fenêtre principale de votre application. Il contient la barre de menus, la barre d'outils, la séparation de la fenêtre en différentes vues redimensionnables et détachables (avec possibilité de les disposer en onglets), les éditeurs de texte avec coloration syntaxique, les formulaires d'édition de fichiers XML, les panneaux latéraux, la barre de statut, etc...</p>
                <p>Pour vous faire une bonne idée de ce que fournit le Workbench, je vous conseille d'ouvrir Eclipse : tout ce qui se trouve dans la fenêtre principale est fourni par RCP en tant que composants rapidement réutilisables. Vous pourrez même créer plusieurs perspectives.</p>
                <p>Vous pourrez même réutiliser les icônes et actions standard telles que le copier / coller.</p>
                <p>Sans oublier le fait que vous pourrez créer des boîtes de dialogue de propriétés avec un arbre filtrable sur la gauche, un en-tête avec une icône et un panneau d'aide sur la droite.</p>
            </div>
            <div class="subChapter">
                <h3>I.5 - Les plugins</h3>
                <p>Le second atout de RCP est, comme je l'ai déjà mentionné, l'architecture en plugins. En fait, l'application principale elle-même est un plugin. Les plugins pourront modifier toute l'application, ajouter des actions dans les menus et barres d'outils, changer l'écran de démarrage... RCP fournit toute la logique nécessaire pour que les plugins puissent communiquer ensemble, il fournit le gestionnaire de plugins... Via Eclipse, vous pourrez créer un « site de mise à jour » qui contiendra tous les plugins et se situera sur votre serveur afin que chaque client puisse l'interroger pour connaître l'existence de nouvelles versions de plugins, les télécharger et les installer.</p>
            </div>
        </div>
        <div class="chapter">
            <h2>II. L'application principale</h2>
            <p>Le but de ce tutoriel est de créer une application principale très simple, et de séparer chaque module dans des plugins indépendants. L'application principale chargera l'espace de travail et s'occupera de la mise à jour des plugins. La taille de chaque plugin devrait rester faible afin de minimiser le temps de téléchargement des mises à jour.</p>
            <div class="subChapter">
                <h3>II.1 - Création du projet</h3>
                <p>Entrons tout de suite dans le vif du sujet et créons notre première application RCP.</p>
                <p>Lancez Eclipse, et créez un nouveau projet (File -&gt; New -&gt; Project...). Développez « Plug-in Development » et sélectionnez « Plug-in Project ». Comme dit précédemment, tout est plugin dans RCP, même l'application principale. Cliquez « Next &gt; ».</p>
                <img src="images/introeclipsercp1.png" />
                <p>Choisissez un nom de projet, « RCPTest » par exemple, et cliquez sur « Next &gt; ».</p>
                <p>Dans l'écran qui suit, veillez bien à répondre « Yes » à « Would you like to create a rich client application  ». C'est ici que vous spécifiez si ce projet que vous êtes en train de créer est une application autonome RCP ou un plugin. Cliquez sur « Next &gt; ».</p>
                <p>Nous allons utiliser un modèle pour notre première application RCP. Nous choisiront « RCP Mail Template » car celui-ci est assez complet. Cliquez sur « Finish » pour créer le projet.</p>
                <img src="images/introeclipsercp2.png" />
                <p>Il est possible qu'Eclipse vous propose d'ouvrir une nouvelle Perspective de Développement (agencement de fenêtres optimisé pour le développement d'un type précis d'application) adaptée à RCP. Si c'est le cas, cliquez sur « Yes ».</p>
                <p>Pour exécuter cette application, choisissez « Run » -&gt; « Run As » -&gt; « Eclipse Application ». Après un écran de démarrage personnalisé, vous pourrez admirer cette fenêtre :</p>
                <img src="images/introeclipsercp3.png" width="100%" />
            </div>
        </div>
        <div class="chapter">
            <h2>III. Mise en place de plugins</h2>
            <div class="subChapter">
                <h3>III.1 - Création d'un plugin</h3>
                <p>Ouvrez l'assistant de création de projet via « File » -&gt; « New » -&gt; « Project... ». Choisissez « Plug-in Project », cliquez sur « Next &gt; », donnez un nom à votre plugin (« RCPPlugin » pour l'exemple) puis cliquez deux fois sur « Next &gt; ». Nous allons créer un simple « Hello, World » plugin. Choisissez ce modèle et cliquez sur « Finish ».</p>
                <p>Le plugin est pour l'instant indépendant de l'application principale : si vous exécutez l'application principale, le plugin ne sera pas chargé. Choisissez « Run » -&gt; « Run... » pour modifier les options d'exécution du projet principal. Dans l'onglet « Plug-ins », cochez « RCPPlugin ». C'est tout ce qui est nécessaire pour exécuter le plugin avec l'application principale. Cliquez sur « Run ». Un nouveau menu (« Sample Menu ») et un nouveau bouton dans la barre d'outils sont apparus.</p>
            </div>
            <div class="subChapter">
                <h3>III.2 - Déploiement de l'application et de ses plugins</h3>
                <p>Nous avons vu comment créer un projet et un plugin, ainsi que comment les exécuter dans Eclipse.</p>
                <p>Pour déployer l'application sur l'ordinateur des utilisateurs, vous devez exporter le projet RCP. Pour cela, il est nécessaire de créer une « configuration de produit ». Vous ne devez en faire qu'un seul et ce sera, en quelque sorte, l' « identifiant unique » de votre projet. En effet, lors de l'export de vos plugins, vous devrez leur associer une application : ces plugins sont-ils faits pour s'intégrer dans Eclipse, ou dans l'application RCPTest. En leur associant la configuration de produit de RCPTest, vous garantissez que ces plugins sont bien intégrables dans cette application.</p>
                <p>Le produit permet aussi de changer le nom de l'application, son icône, son écran de démarrage, ses scripts de démarrage sur les différentes plateformes et le plugin à utiliser pour la page de bienvenue.</p>
                <p>Cliquez-droit sur le projet RCPTest. Choisissez « New » -&gt; « Other... » -&gt; « Plug-in Development » -&gt; « Product Configuration ». Donnez un nom au fichier (« rcptest.product ») et cliquez sur « Finish ».</p>
                <p>Vous êtes maintenant prêt à déployer l'application. Cliquez-droit sur le projet principal et choisissez « Export... ». Sélectionnez « Plug-in Development » -&gt; « Eclipse Product » et cliquez sur « Next &gt; ».</p>
                <p>Sélectionnez un dossier où exporter le projet. Vous pourriez aussi choisir de l'exporter dans une archive ZIP, mais ce ne serait que compliquer les choses pour cet exemple. Cliquez sur « Finish » et attendez quelques secondes.</p>
                <p>Vous pouvez maintenant ouvrir le dossiez dans lequel vous avez exporté l'application, ouvrir le dossier « eclipse » (ce nom est configurable) pour découvrir ce genre de structure :</p>
                <img src="images/introeclipsercp4.png" border="1" />
                <p>Il s'agit de la même structure de dossier qu'Eclipse. Exécutez « eclipse.exe » : votre application se lance parfaitement.</p>
                <p>Mais elle ne contient pas le plugin, c'est normal ! Nous allons l'exporter et l'installer comme s'il s'agisait du déploiement d'un nouveau plugin, ou d'une nouvelle version d'un plugin.</p>
                <p>Cliquez-droit sur le projet « RCPPlugin », cliquez sur « Export... », mais cette fois, choisissez « Deployable plug-ins and fragments ». Cliquez sur « Next &gt; », choisissez un dossier et cliquez sur « Finish ».</p>
            </div>
        </div>
        <div class="chapter">
            <h2>IV. Mise à jour de plugins</h2>
            <div class="subChapter">
                <h3>IV.1 - Le site de mise à jour</h3>
                <p>Un site de mise à jour est tout simplement un dossier accessible par le réseau et dans lequel vous déposez vos plugins.</p>
                <p>Pour créer un site de mise à jour, créez un nouveau projet et choisissez « Plug-in Development » -&gt; « Update Site Project » :</p>
                <img src="images/introeclipsercp5.png" />
                <p>Nous l'appelerons « RCPUpdate ». Vous pouvez décocher « Use default location » et entrer le chemin d'un nouveau dossier, plutôt que de garder le dossier par défaut : c'est là que vous déposerez les features et plugins à publier sur le site.</p>
                <p>Afin de mettre à disposition vos plugins sur le site de mise à jour, vous devez les « enrober » dans une « feature ». Une feature est tout simplement une archive qui peut contenir plusieurs plugins. Par exemple, la fonctionnalité (feature) « Correction orthographique » aura besoin des plugins « spellcheck », « spellcheck.gui », « spellcheck.dic_fr ». Afin de simplifier la vie à vos utilisateurs, vous regrouperez ces trois plugins dans une seule fonctionnalité logique.</p>
                <p>Nous devons donc créer une feature pour mettre à disposition notre plugin. Créez simplement un nouveau projet « Plug-in Development » -&gt; « Feature Project » et donnez-lui le nom « RCPFeature ». Cliquez « Next &gt; » et cochez « RCPPlugin » pour inclure ce plugin dans la fonctionnalité, et cliquez sur « Finish ».</p>
                <p>Revenez ensuite dans l'édition du fichier « site.xml » du projet « RCPUpdate ». Cliquez sur « Add Feature... », sélectionnez sur « RCPFeature », validez par « OK » et sauvegardez site.xml avec Ctrl+S. Cliquez ensuite sur « Synchronize... » et enfin sur « Build All » afin de construire le plugin et la features pour le mettre à disposition sur le site de mise à jour. Cette étape est très importante, ou votre site sera vide.</p>
            </div>
            <div class="subChapter">
                <h3>IV.2 - Le gestionnaire de mise à jour</h3>
                <p>Maintenant que le site de mise à jour est prêt, nous allons pouvoir modifier notre application principale pour utiliser ce site.</p>
                <p>Tout ce que vous avez à faire et d'inclure les packages org.eclipse.update.* dans le projet. Vous bénéficierez ainsi de l'entrée « Software Update » dans le menu « Help » de votre application, tout comme Eclipse.</p>
            </div>
        </div>
        <div class="chapter">
            <h2>Conclusion</h2>
            <p>Avec ce tutoriel, vous devriez maintenant maîtriser les bases du développement d'application RCP. Vous avez appris à créer un projet, ajouter un plugin, déployer le projet et les plugins, ainsi que créer et utiliser un site de mise à jour. C'est à vous de jouer.</p>
            <p>Avec RCP, vous pouvez maintenant créer une application d'entreprise modulaire, où chaque composant pourra automatiquement être mis à jour afin que les utilisateurs bénéficient toujours de la dernière version, tout en profitant d'une interface riche, simple et toujours réactive.</p>
        </div>
    </body>
</html>

